home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / 3DTOSHI2.ZIP / mpg3d / include / G3ddraw.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-05-01  |  4.6 KB  |  155 lines

  1.  
  2. // g3ddraw.h
  3. //
  4. // Copyright (c) 1996 by Toshiaki Tsuji, all rights reserved.
  5.  
  6. #ifndef __G3DDRAW_H__
  7. #define __G3DDRAW_H__
  8.  
  9. #include "stdgfx.h"
  10. #include "g3dpobj.h"
  11. #include "g3dlight.h"
  12.  
  13. #define DRAW_FLAT_TOP     1
  14. #define DRAW_FLAT_BOTTOM  2
  15. #define DRAW_FLAT         3
  16. #define DRAW_GENERAL      4
  17.  
  18. struct FXPDRAWSTRUCT
  19.   {
  20.     FXPPOINT2D *Top,*Bottom,*Middle;
  21.     FXPPOINT2D *Left,*Right;
  22.     LONG Case;
  23.     LONG Length;
  24.     LONG Reserved;
  25.   }; // End of DRAWSTRUCT
  26.   
  27. struct FLPEDGE
  28.   {
  29.     float x,y;
  30.     float u,v;
  31.     float I;
  32.     float Haze;
  33.     float z;
  34.     float Reserved1;
  35.   }; // End of FLPEDGE
  36.  
  37. struct FLPEDGETABLE
  38.   {
  39.     LONG Start;
  40.     LONG Length;
  41.     FLPEDGE *Edge1,*Edge2;  
  42.   }; // End of FLPEDGETABLE
  43.  
  44. struct FXPEDGE
  45.   {
  46.     LONG x,y;
  47.     LONG u,v;
  48.     LONG I;
  49.     LONG Haze;
  50.     LONG z;
  51.     LONG Reserved1;
  52.   }; // End of FXPEDGE
  53.  
  54. struct FXPEDGETABLE
  55.   {
  56.     LONG Start;
  57.     LONG Length;
  58.     FXPEDGE *Edge1,*Edge2;  
  59.   }; // End of FXPEDGETABLE
  60.  
  61. struct FXPGRADIENT
  62.   { // In case of affine mapping, 1/z is ignored
  63.     LONG OneOverZdX, OneOverZdY;  // (1/z)/dx, (1/z)/dy
  64.     LONG UOverZdX, UOverZdY;      // (u/z)/dx, (u/z)/dy 
  65.     LONG VOverZdX, VOverZdY;      // (v/z)/dx, (v/z)/dy 
  66.     LONG IOverZdX, IOverZdY;      // (I/z)/dx, (I/z)/dy 
  67.     LONG HOverZdX, HOverZdY;      // (Haze/z)/dx, (Haze/z)/dy 
  68.   }; // End of FXPGRADIENT
  69.  
  70. struct CLIPPOINT3D
  71.   {
  72.     float x,y,z;
  73.     float u,v,I;
  74.     float Haze;
  75.   }; // End of CLIPPOINT3D
  76.  
  77. class G3DDRAW
  78.   {
  79.     protected :
  80.       LONG CenterX,CenterY;
  81.       float ViewDistance;
  82.       IMAGE *Dest;
  83.       RECTANGLE ViewPort;
  84.       COLORTABLE *ShadeTable;
  85.       float MIN_Z_DISTANCE;
  86.  
  87.       BOOLEAN SortPolyHorz  ( FXPPOINT2D *Points, FXPDRAWSTRUCT *DrawStruct );     
  88.       
  89.       VOID DrawPolyFast ( FXPPOINT2D *Points, ANIMIMAGE *Texture,
  90.                           LONG Intensity, LONG Color, LONG DrawShadeFlags,
  91.                           LONG DrawFaceFlags );
  92.  
  93.       VOID CreateFLPEdgeTable ( FLPPOINT2D *Points, LONG NumPoints );
  94.  
  95.       VOID XYIntersect ( FXPPOINT2D *In, FXPPOINT2D *Out,
  96.                          FXPPOINT2D *Intersect, LONG Code, LONG ShadeFlags,
  97.                          LONG FaceFlags );
  98.       LONG ClipFXPPolygon ( FXPPOINT2D *Points, LONG NumPoints, LONG Code,
  99.                             LONG ShadeFlags, LONG FaceFlags );
  100.       BOOLEAN CreateFXPEdgeTable ( FXPPOINT2D *Points, LONG NumPoints,
  101.                                    LONG ShadeFlags, LONG FaceFlags );
  102.       VOID CreateFXPGradient ( FXPGRADIENT *FxpGradient, FXPPOINT2D *Points,
  103.                                LONG ShadeFlags, LONG FaceFlags );
  104.       VOID DrawPolySlow ( FXPPOINT2D *Points, ANIMIMAGE *Texture,
  105.                           LONG Intensity, LONG Color, LONG DrawShadeFlags,
  106.                           LONG DrawFaceFlags );
  107.  
  108.       VOID ZIntersect ( CLIPPOINT3D *In, CLIPPOINT3D *Out, CLIPPOINT3D *Intersect,
  109.                         LONG DrawShadeFlags, LONG DrawFaceFlags );
  110.       LONG ZClip ( CLIPPOINT3D *Points, CLIPPOINT3D *ClippedPoints, LONG Code, 
  111.                    LONG DrawShadeFlags, LONG DrawFaceFlags );
  112.  
  113.       VOID DrawPoly ( G3DPOLYHEDRON *Object, G3DPOLY *Poly );
  114.  
  115.       VOID InitFunctionTable ();
  116.  
  117.     public :
  118.       LONG ShadeFlags;
  119.       LONG FaceFlags;
  120.       COLORTABLE *BlendTable;
  121.       BOOLEAN DoHaze;
  122.       COLORTABLE *HazeTable;
  123.     
  124.       G3DDRAW ();
  125.       virtual ~G3DDRAW ();
  126.       
  127.       LONG GetCenterX () { return CenterX; };
  128.       LONG GetCenterY () { return CenterY; };
  129.       float GetViewDistance () { return ViewDistance; };
  130.       RECTANGLE GetViewPort ();
  131.       float GetNearClipZ ();
  132.  
  133.       VOID SetDestination ( IMAGE *Destination );
  134.       VOID SetViewDistance ( float VDistance ); 
  135.       VOID SetScreenCenter ( LONG Cx, LONG Cy ); 
  136.       VOID SetViewPort ( LONG x1, LONG y1, LONG x2, LONG y2 );
  137.       VOID SetNearClipZ ( float Z );
  138.       
  139.       VOID DrawShape ( G3DSHAPE *Shape );
  140.  
  141.       // For benchmark purpose                      
  142.       VOID TestDrawTriangle ( FXPPOINT2D *Points, ANIMIMAGE *Texture,
  143.                               LONG Intensity, LONG Color, LONG DrawShadeFlags,
  144.                               LONG DrawFaceFlags, COLORTABLE *BlendTBL, COLORTABLE *ShadeTBL,
  145.                               COLORTABLE *HazeTBL ); 
  146.       VOID TestDrawTriangle2 ( FXPPOINT2D *Points, ANIMIMAGE *Texture,
  147.                                LONG Intensity, LONG Color, LONG DrawShadeFlags,
  148.                                LONG DrawFaceFlags, COLORTABLE *BlendTBL, COLORTABLE *ShadeTBL,
  149.                                COLORTABLE *HazeTBL ); 
  150.   }; // End of G3DDRAW
  151.  
  152. #endif
  153.  
  154.  
  155.